// T表示泛型,具体什么类型是调用这个方法的时候决定
/* function getData<T>(value:T):T {
    return value
}
getData<number>(11);
getData<string>('11'); */

// any可以实现，但是没有类型检验

// 泛型类
/* class minClass {
    public list:number[] = []
    add(num:number){
        this.list.push(num)
    }
    min():number {
        var minNum = this.list[0]
        for (let i = 0; i < this.list.length; i++) {
            if(minNum > this.list[i]){
                minNum = this.list[i]
            }
        }
        return minNum
    }
}

let m = new minClass()
m.add(7);
m.add(23);
m.add(3);
m.add(42);
m.add(135);
alert(m.min()) */

// 类的泛型   1.传入任意值 2.类型校验
/* class MinClass<T> {
    public list:T[] = []
    add(value:T){
        this.list.push(value)
    }
    min():T {
        var minNum = this.list[0]
        for (let i = 0; i < this.list.length; i++) {
            if(minNum > this.list[i]){
                minNum = this.list[i]
            }
        }
        return minNum
    }
}

let m1 = new MinClass<number>();
m1.add(1)
m1.add(3)
m1.add(2)
m1.add(123)
alert(m1.min())

let m2 = new MinClass<string>()
m2.add('a')
m2.add('v')
m2.add('x')
alert(m2.min()) */